/**
 * @file Net.h
 * @author Lost
 * @date 六月 2018
 * @brief 
 * 网络模块导出类
 */

#ifndef __NET_H__
#define __NET_H__

#include "NetBase.h"

/**
 * @brief 网络模块导出类
 */
class CNet : public CNetBase
{
public:
    CNet();
    ~CNet();
public:
    /**
     * @brief 初始化
     */
    virtual bool Init();

    /**
     * @brief 添加监听端口
     */
    virtual int AddListen(const char *pIp, int iPort);

    /**
     * @brief 添加连接
     */
    virtual int AddConnect(const char *pIp, int iPort);

    /**
     * @brief 检测网络事件
     */
    virtual int Polling(int iWaitTime);

    /**
     * @brief 收到消息事件
     */
    virtual int OnRecv(const int iSocket, char *pData, int iLen);

    /**
     * @brief 接收报文事件
     */
    virtual bool OnPacket(const int iSocket, char *pData, int iLen);

    /**
     * @brief 收到连接事件
     */
    virtual bool OnAccept(const int iListenSocket, const int iClientSocket);

    /**
     * @brief 收到连接事件
     */
    virtual bool OnConnect(const int iSocket);

    /**
     * @brief 收到关闭事件
     */
    virtual bool OnClose(const int iSocket);

    /**
     * @brief 发送报文
     * @note 返回发送字节，返回后数据不一定发送到网络层，有可能因为阻塞保存在缓存链表中
     */
    virtual int Send(const int iSocket, const char *pData, const int iLen);

    /**
     * @brief 发送报文
     */
    virtual void Close(const int iSocket);
};


#endif // __NET_H__


